package com.Socket;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Logger;

/**
 * @author 不鄢
 */
public class HelloServer {
    private static final Logger logger = Logger.getLogger(HelloServer.class.getName());

    public void start(int port){
        // 1. 创建ServerSocket并绑定监听端口
        try (ServerSocket serverSocket = new ServerSocket(port)){
            Socket socket;
            // 2.通过accept()方法监听客户端的请求
            // ServerSocket 的 accept（） 方法是阻塞方法，
            // 也就是说 ServerSocket 在调用 accept（)等待客户端的连接请求时会阻塞，
            // 直到收到客户端发送的连接请求才会继续往下执行代码。
            while ((socket = serverSocket.accept()) != null){
                logger.info("建立新连接");
                try (ObjectInputStream inputStream = new ObjectInputStream(socket.getInputStream());
                     ObjectOutputStream outputStream = new ObjectOutputStream(socket.getOutputStream())){
                    // 3. 读取客户端发送的请求信息
                    Message message = (Message) inputStream.readObject();
                    logger.info("接收到客户端信息：" + message);
                    // 4. 处理客户端请求并返回响应信息
                    message.setContent("Hello, Client!");
                    outputStream.writeObject(message);
                    outputStream.flush();
                } catch (ClassNotFoundException e) {
                    throw new RuntimeException(e);
                }
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    public static void main(String[] args) {
        HelloServer server = new HelloServer();
        server.start(6666);
    }
}
